The representation and rendering of graphical objects is of fundamental importance in the field of computer graphics. Graphical objects can have many properties, including color, a compositing operator, a shape representation, and a geometric transformation. A renderer uses a shape representation, along with the geometric transformation, to determine the pixels covered by a graphical object. Furthermore, pixel coverage can be either bi-level or multileveled. In the bi-level case, each pixel is either covered or not covered by a particular graphical object. In the multileveled case, the area of the pixel covered by a graphical object is approximated, thereby allowing intermediate levels of pixel coverage. This is sometimes referred to as grayscale rendering, although it is important to note that the gray level represents pixel coverage, which is not the same as the color of the object.
The representation of an object's shape usually depends on the type of object, although it is possible to convert between different types of representations. For example, the shapes of objects used in vector graphics are usually described using paths, which are sets of lines and curves. The shapes of photographic images are usually defined by the rectangular region determined by the dimensions of the image. The shape of text objects, however, is considerably more complex than that of vector graphics or images. Text is often represented by a text string, a reference to a font and a geometric transformation. Generally, a font contains a collection of glyphs. The text string refers to a sequence of glyphs from the font by some means of encoding. Each glyph in the font contains a shape representation, and possibly some other information such as metrics and hinting information.
Whilst the following discussion focuses on glyph shape representations, the discussion still applies to the general topic of shape representations.
Bitmaps are perhaps the earliest form of glyph shape representation. Bitmaps are still quite heavily used for glyph representations at low resolutions, such as required for display devices used on hand-held devices including digital still cameras and digital video cameras. The attractiveness of bitmap glyphs at low resolutions is due to the low memory and low processing required by such bitmap-based glyphs. However, the quality of a bitmap-based shape representation degrades significantly if a geometric transformation, such as scaling, is required. This may be required if, for example, the digital camera is connected to large display (e.g. a home television display) and text such as menus and the like is required to be reproduced on the large display. If text reproduction is required at multiple point sizes, then a bitmap should be stored for each point size if the maximum quality is required. This has the disadvantage that an increased memory capacity is required to hold the additional glyph representations. Furthermore, animation that involves scaling text may exhibit aliasing.
Path-based glyph representation attempts to overcome the transformation limitations of bitmap-based glyph representations. Path-based glyph representations are found in the Type 1 (Adobe Systems Inc) and TrueType (Apple Computer Inc) font formats. Glyph shapes are described by a set of straight lines and Bezier curves. Both formats define font filling and pixel placement rules, which allows an outline to be converted into bi-level bitmaps. Various techniques exist that allow multilevel bitmap generation, such as super-sampling. However, super-sampling has the disadvantage of requiring significantly more processing time. The increased processing time is unsuitable for the real-time rendering required for text animation.
Another method of generating a multilevel bitmap of a shape involves storing a high-resolution bi-level bitmap. Each pixel in the lower resolution multilevel bitmap is determined by averaging a corresponding rectangular region in the high resolution bi-level bitmap. This method has the disadvantage of significant computational costs per pixel.